package Negocio;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;

import javax.persistence.*;
import DTO.ServicioLogisticaVO;
import SRV.ProductoLogisticaSRV;

@Entity
@DiscriminatorValue("servicioLogistica")
public class ServicioLogistica extends Servicio
{
	@OneToMany(fetch = FetchType.EAGER)
	@JoinColumn(name="idServicio")
	private Collection<ProductoLogistica> productos;

	public ServicioLogistica(float costo, String nombre) 
	{
		super(costo, nombre);
		this.productos = new ArrayList<ProductoLogistica>();
	}

	public ServicioLogistica() {
	super();
	}
	
	public ServicioLogistica toBusiness(ServicioLogisticaVO serVO){
	    ProductoLogistica producto = null;
	    ProductoLogisticaSRV daoPro = new ProductoLogisticaSRV();
	    
	    ServicioLogistica devuelto = new ServicioLogistica(serVO.getCosto(), serVO.getNombre());
	    
	    for (int idProd : serVO.getProductos()){
			producto = daoPro.getProductoLogistica(idProd);
			producto = producto.toBusiness(producto.toVO());
			devuelto.agregarProducto(producto);
	    }
	    
	    return devuelto;
	}

	public Set<ProductoLogistica> getProductos() {
		return  (Set<ProductoLogistica>) productos;
	}

	public void setProductos(ArrayList<ProductoLogistica> productos) {
		this.productos = productos;
	}
	
	public void agregarProducto(ProductoLogistica producto){
		if (!tenesEsteProducto(producto))
			productos.add(producto);
	}

	public boolean tenesEsteProducto(ProductoLogistica producto) {
		if (this.productos == null)
			this.productos = new ArrayList<ProductoLogistica>();
		for ( ProductoLogistica prod : productos)
			if (prod.sosEsteProducto(producto.getIdProdLog()))
				return true;
		return false;
	}

	
	public ServicioLogisticaVO toVO() {
		ArrayList<Integer> productosVO = new ArrayList<Integer>();
		for (ProductoLogistica prod : productos)
			productosVO.add(prod.getIdProdLog());
		
		ServicioLogisticaVO servicioVO = new ServicioLogisticaVO(getIdServicio(), getCosto(), getNombre(), productosVO);
		return servicioVO;
	}

	@Override
	public boolean sosBasico() {
	    // TODO Auto-generated method stub
	    return false;
	}

	@Override
	public boolean sosGranel() {
	    // TODO Auto-generated method stub
	    return false;
	}

	@Override
	public boolean sosLogistica() {
	    // TODO Auto-generated method stub
	    return true;
	}
	
	public int contarProductos(){
		int total = 0;
		for(ProductoLogistica p : productos){
			total++;
		}
		return total;
	}
	
	
}
